﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daSemanticAnalyser.SemanticTree
{
    using daSyntaxAnalyser.SyntaxTree;

    /// <summary>
    /// Переменная
    /// </summary>
    public class VarSemanticElement : UnitElementSemanticElement
    {
        private CommonTypeSemanticElement type;
        private bool isplatform;
        private ISyntaxTreeElement value;
        private VarSemanticElement absolutevar;

        /// <summary>
        /// Тип
        /// </summary>
        public CommonTypeSemanticElement Type { get { return type; } set { type = value; } }

        /// <summary>
        /// Является ли переменная устаревшей (директива platform)
        /// </summary>
        public bool IsPlatform { get { return isplatform; } set { isplatform = value; } }

        /// <summary>
        /// Значение
        /// </summary>
        public ISyntaxTreeElement Value { get { return value; } set { this.value = value; } }

        /// <summary>
        /// Ссылка absolute
        /// </summary>
        public VarSemanticElement AbsoluteVar { get { return absolutevar; } set { absolutevar = value; } }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="Name">имя элемента</param>
        /// <param name="Parent">родитель элемента семантического дерева</param>
        /// <param name="Unit">модуль, содержащий элемент</param>
        /// <param name="Type">тип</param>
        /// <param name="IsPlatform">является ли переменная устаревшей (директива platform)</param>
        /// <param name="Value">значение</param>
        /// <param name="SyntaxElement">соответствующий элемент синтаксического дерева</param>
        public VarSemanticElement(string Name, IChildSemanticElement Parent, FileSemanticElement Unit, CommonTypeSemanticElement Type, bool IsPlatform, ISyntaxTreeElement Value, VarSemanticElement AbsoluteVar, ISyntaxTreeElement SyntaxElement)
            : base(Name, Parent, Unit, SyntaxElement)
        {
            type = Type;
            isplatform = IsPlatform;
            value = Value;
            absolutevar = AbsoluteVar;
        }
    }
}
